package br.com.cogerh.sidec.view;

import java.util.ArrayList;
import java.util.List;

import br.com.cogerh.sidec.dao.PessoaDAO;
import br.com.cogerh.sidec.dao.PessoaImpl;
import br.com.cogerh.sidec.model.Gerencia;
import br.com.cogerh.sidec.model.Pessoa;
import br.com.cogerh.sidec.model.Projeto;
import br.com.cogerh.sidec.util.DAOfactory;

public class PessoaRN {

	private PessoaDAO pessoaDAO;
	List<Pessoa> listaPessoasGerencia = new ArrayList<Pessoa>();

	public void salvar(Pessoa responsavel) {
		pessoaDAO =  new PessoaImpl();

		pessoaDAO.salvar(responsavel);
	}

	public void salvarLista(List<Pessoa> pessoas){
		pessoaDAO =  new PessoaImpl();

		pessoaDAO.salvarListaPessoas(pessoas);
	}
	

	public List<Pessoa> listarPessoasDisponiveis(){
		pessoaDAO =  new PessoaImpl();

		List<Pessoa> pessoas = new ArrayList<Pessoa>();

		for (Pessoa pessoa : pessoaDAO.listar()) {
		if(pessoa.getGerencia() == null){
			pessoas.add(pessoa);
		}
	}
	for (Pessoa pessoa : pessoas) {
		System.out.println("Nome: "+pessoa.getNome());
	}
	
	
	return pessoas;
	
	}
	
	public Pessoa listarpessoaById(Integer id){
		pessoaDAO =  new PessoaImpl();

		Pessoa pessoa = new Pessoa();
		for (Pessoa pessoaFor : listar()) {
			if(pessoaFor.getId().equals(id)){
				pessoa = pessoaFor;
			}
			
		}
	return pessoa;
	}
	
	public void populaGerencia(){
		pessoaDAO =  new PessoaImpl();

		GerenciaRN gerenciaRN = new GerenciaRN();
		List<Gerencia> gerencias = gerenciaRN.listar();
		for (Gerencia gerencia : gerencias) {
			for (Pessoa pessoa : gerencia.getPessoas()) {
				listaPessoasGerencia.add(pessoa);
			}
		}
		
	
		System.out.println("Tamanho:"+gerencias.size());
	}
	
	public List<Pessoa> pessoasDisponiveis(){
		pessoaDAO =  new PessoaImpl();

		populaGerencia();
		List<Pessoa> allPessoa = new ArrayList<Pessoa>();
		List<Pessoa> pessoasDisponiveis = new ArrayList<Pessoa>();
		List<Pessoa> pessoaExcluir = new ArrayList<Pessoa>();
		
		for (Pessoa pessoa : pessoaDAO.listar()) {
			allPessoa.add(pessoa);
			
		}

			pessoasDisponiveis = allPessoa;

		for (Pessoa pessoa : listaPessoasGerencia) {
			for (Pessoa pessoa2 : allPessoa) {
				if(pessoa.getNome().equals(pessoa2.getNome())){
					pessoaExcluir.add(pessoa2);
					break;
				}
				
			}
		}
		for (Pessoa pessoa : pessoaExcluir) {
			pessoasDisponiveis.remove(pessoa);
		}
					
		return pessoasDisponiveis;		
		
	}
		
	
	public List<Pessoa> ListarByEmail(String email){
		pessoaDAO =  new PessoaImpl();

		return pessoaDAO.listarPessoaByEmail(email);
	}
	
	
	public List<Pessoa> listar() {
		pessoaDAO =  new PessoaImpl();

		return pessoaDAO.listar();
	}

	public void excluir(Pessoa responsavel) {
		pessoaDAO =  new PessoaImpl();

		pessoaDAO.excluir(responsavel);
	}
	
	public void editar(Pessoa responsavel){
		pessoaDAO =  new PessoaImpl();

		pessoaDAO.editar(responsavel);
	}


	
	public List<Pessoa> listarByParametros(String nome) {
		pessoaDAO =  new PessoaImpl();

		List<Pessoa> responsaveis = new ArrayList<Pessoa>();
		
		for (Pessoa responsavel : listar()) {
			if(responsavel.getNome().equals(nome)){
				responsaveis.add(responsavel);
				break;
			}
		}
		
		return responsaveis;

	}
	
	
	
}
